package org.dromara.hm.domain.vo.saleOrder;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.apache.poi.hpsf.Decimal;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.hm.domain.HmSaleOrder;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 销售订单视图对象 hm_sale_order
 *
 * @author zy Hu
 * @date 2024-12-15
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = HmSaleOrder.class)
public class HmSaleOrderVo implements Serializable
{

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 销售记录id
     */
    private Long saleId;

    /**
     * 订单号 (JSON中新增)
     */
    private String orderNo; // 新增字段

    /**
     * 销售产品id
     */
    private Long saleProductId;

    /**
     * 销售产品名称
     */
    @ExcelProperty(value = "销售产品")
    @Translation(type = TransConstant.PRODUCT_ID_TO_NAME, mapper = "saleProductId")
    private String saleProductName;

    /**
     * 销售数量
     */
    @ExcelProperty(value = "销售数量")
    private BigDecimal saleNum;

    /**
     * 销售店铺id
     */
    private Long saleDept;

    /**
     * 销售店铺名称
     */
    @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "saleDept")
    private String saleDeptName;

    /**
     * 销售人员id
     */
    private Long saleUser;

    /**
     * 销售人员名称
     */
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "saleUser")
    private String saleUserName;

    /**
     * 客户id
     */

    private Long customerId;

    /**
     * 客户名称
     */
    @ExcelProperty(value = "客户")
    @Translation(type = TransConstant.CUSTOMER_ID_TO_NAME, mapper = "customerId")
    private String customerName;

    /**
     * 客户电话 (JSON中新增)
     */
    private String customerPhone; // 新增字段


    /**
     * 已提货数量
     */
    @ExcelProperty(value = "已提货数量")
    private BigDecimal pickUpNum;

    /**
     * 剩余提货数量
     */
    @ExcelProperty(value = "剩余提货数量")
    private BigDecimal surplusNum;

    /**
     * 订单金额
     */
    @ExcelProperty(value = "订单金额")
    private BigDecimal saleAmount;

    /**
     * 已回款金额
     */
    @ExcelProperty(value = "已回款金额")
    private BigDecimal returnAmount;

    /**
     * 剩余未回款金额
     */
    @ExcelProperty(value = "剩余未回款金额")
    private BigDecimal refundSurplusNum;


    /**
     * 销售时间
     */
    @ExcelProperty(value = "销售时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date saleOrderTime;



    /**
     * 状态 (JSON中为 orderStatus)
     */
    private String status;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;

    /**
     * 是否评点
     */
    private String isGift;

    /**
     * 评点商品id
     */
    private String giftProductId;

    /**
     * 评点商品名称
     */
    @Translation(type = TransConstant.PRODUCT_ID_TO_NAME, mapper = "giftProductId")
    private String giftProductName;

    /**
     * 评点数量
     */
    private BigDecimal giftNum;

    /**
     * 评点提取数量
     */
    private BigDecimal giftPickUpNum;

    /**
     * 评点剩余数量
     */
    private BigDecimal giftSurplusNum;
    /**
     * 总销售数量
     */
    private BigDecimal saleNumTotal;
    private Long createDept;

    /**
     * 回款提货记录 (HmSaleOrderPickUpVoList 已存在)
     */
    private List<HmSaleOrderPickUpVo> hmSaleOrderPickUpVoList;

    /**
     * 评点集合 (giftList 已存在)
     */
    private List<HmSaleOrderGiftVo> giftList;

    /**
     * 订单项列表 (JSON中新增)
     */
    private List<OrderItemVo> orderItemList; // 新增字段

    /**
     * 补充提货记录列表 (JSON中新增)
     */
    private List<HmSupplementaryPickupRecordVo> supplementaryPickupRecordList; // 新增字段

    /**
     * 退款记录列表 (JSON中新增)
     */
    private List<HmSaleOrderRefundVo> refundRecordList; // 新增字段

    /**
     * 支付记录列表 (JSON中新增)
     */
    private List<PaymentRecordVo> paymentRecordList; // 新增字段

    /**
     * 累计退款金额 (refundAmount 已存在)
     */
    private BigDecimal refundAmount;

    /**
     * 可退金额上限(根据支付金额计算)
     */
    private BigDecimal maxRefundAmount; // JSON中没有，保留原有数据

    /**
     * 退款状态(0-无退款 1-部分退款 2-全额退款) (refundStatus 已存在)
     */
    private Integer refundStatus;

    /**
     * 累计退货数量 (returnTotalNum 已存在)
     */
    private BigDecimal returnTotalNum;

    /**
     * 退货状态(0-无退货 1-主产品退货 2-评点退货 3-全退 ) (returnStatus 已存在)
     */
    private Integer returnStatus;

    /**
     * 最近退货时间 (lastReturnTime 已存在)
     */
    private Date lastReturnTime;

}
